package com.academic_system.service;

import com.academic_system.model.*;
import com.academic_system.util.Message;
import com.academic_system.util.Msg;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * @Description: 党建管理模块学生申请和申请处理业务接口层
 */
@Service
public interface PartyApplyService {
    /**
     * @param ： StuApply stuApply
     * @Description :学生申请入党
     * @methodName ：addApplyParty
     * @returnType ：void
     **/

    int addApplyParty(StuApply stuApply);

    /**
     * @param: int stuApplyid, int stateupdate
     * @Description: 老师同意学生入党，通过入党申请表主键id将state改为1
     * @methodName: replyOfStuApplyPartyYes
     * @returnType: Message
     **/

    Message replyOfStuApplyPartyYes(int stuApplyid);

    /**
     * @Description: 老师拒绝学生入党，通过入党申请表主键id将state改为2
     * @methodName: replyOfStuApplyPartyDeny
     * @param: int stuApplyid
     * @returnType: Message
     **/

    Message replyOfStuApplyPartyDeny(int stuApplyid);

    /**
     * @Description: 学生查询个人党员信息，信息显示
     * @methodName: queryPartyMemberInforByParty_member_id
     * @param: int party_member_id
     * @returnType: PartyMember
     **/

    PartyMember queryPartyMemberInforByParty_member_id(int party_member_id);

    /**
     * @param ：int party_member_id
     * @Description :学生党员查询个人所在党支部基本信息
     * @methodName :queryPartyInforByParty_member_id
     * @returnType ：Party
     **/

    Party queryPartyInforByParty_member_id(int party_member_id);

    /**
     * @param ：int party_member_account
     * @Description :学生党员账号，即学生学号查询个人所在党支部基本信息
     * @methodName :queryPartyByPartyMemberAccount
     * @returnType ：Party
     **/

    Party queryPartyByPartyMemberAccount(int party_member_account);

    /**
     * @param :int stu_num
     * @Description :通过学生学号查询学生ID
     * @methodName :queryStuIdByStuNum
     * @returnType :int
     **/

    Integer queryStuIdByStuNum(int stu_num);

    /**
     * @param :int stu_num
     * @Description :通过党组织编号查询党组织ID
     * @methodName :queryPartyIdByPartyNum
     * @returnType :int
     **/
    int queryPartyIdByPartyNum(int partyNum);


    /**
     * @param
     * @Description :查询所有党组织
     * @methodName
     * @returnType : List<Party>
     **/

    List<Party> queryAllPartys();

    /**
     * @param :int stu_num
     * @Description :通过学生学号修改学生政治面貌信息
     * @methodName :updateStudentPoli
     * @returnType :Msg
     **/

    Msg updateStudentPoli(int stu_num);

    /**
     * @param
     * @Description:老师查询所有学生的申请入党记录
     * @methodName: queryAllStuApplys
     * @returnType: Message
     **/

    Message queryAllStuApplys();

    /**
     * @param :StuApply stuApply
     * @Description : 多条件动态sql查询
     * @methodName :queryApplyByConditions
     * @returnType :Message
     **/

    Message queryApplyByConditions(StuApply stuApply);

    /**
     * @param
     * @Description :通过学生申请入党id查询对应的StuApply对象
     * @methodName :querystuApplyBystuApplyId
     * @returnType: Message
     **/

    Message querystuApplyBystuApplyId(int stu_apply_id);

    /**
     * @param :PartyMember partyMember
     * @Description :老师点击同意入党的同时往党员表添加一条新的对应记录
     * @methodName :addPartyMember
     * @returnType :Message
     **/

    Message addPartyMember(PartyMember partyMember);

    /**
     * @Description: 学生通过党员账号即学生学号查询个人党员信息
     * @methodName: querypartyMemberByAccount
     * @param: int party_member_account
     * @returnType: PartyMember
     **/

    PartyMember querypartyMemberByAccount(int party_member_account);

    /**
     * @param stu_Info_Id
     * @Description 根据学生id查询一个4级成绩
     * @methodName queryCet4
     * @returnType int
     **/
    int queryCet4(int stu_Info_Id);
    /**
     * @param : stuId
     * @Description 根据学生id查询一个4级成绩, 根据四级成绩判断是否有资格入党
     * @methodName judgeApplyBycet4
     * @returnType Message
     **/
    /* Message judgeApplyBycet4(int stuId);*/

    /**
     * @param :int stuNum
     * @Description :通过学生党员账号即学生学号查看对应党组织政治面貌的统计
     * @methodName :queryPoliTypeByParMemberNum
     * @returnType :List<Map>
     **/
    List<Map> queryPoliTypeByParMemberNum(int stuNum);
}

